

package cn.shengchao.examstar.pay.model.service;

import cn.shengchao.examstar.pay.acl.ports.client.ProductPayPrice;
import cn.shengchao.examstar.pay.infrastructure.dao.po.PayOrder;
import cn.shengchao.examstar.pay.model.entity.PayOrderEntity;
import cn.shengchao.examstar.pay.model.entity.ShopCartEntity;
import cn.shengchao.examstar.product.domain.entity.FreeCourseKnowledgeProduct;

import java.util.List;

/**
 * 订单服务
 */
public interface IOrderService {

    /**
     * 通过购物车实体对象，创建支付单实体（用于支付）—— 所有的订单下单都从购物车开始触发
     *
     * @param shopCartEntity 购物车实体
     * @return 支付单实体
     */
    PayOrderEntity createOrder(ShopCartEntity shopCartEntity) throws Exception;

    /**
     * 更新订单状态
     *
     * @param orderId 订单ID
     */
    void changeOrderPaySuccess(String orderId);

    /**
     * 查询有效期内，未接收到支付回调的订单
     */
    List<PayOrder> queryNoPayNotifyOrder();

    /**
     * 查询超时15分钟，未支付订单
     */
    List<String> queryTimeoutCloseOrderList();

    boolean changeOrderClose(String orderId);

    /**
     * 免费课程解锁创建0费用订单。
     * @param userId
     * @param orderId
     * @param courseId
     * @param productId
     * @throws Exception
     */
    String createFreeLockOrder(Long userId,String orderId,Long courseId, Long productId) ;
    FreeCourseKnowledgeProduct loadFreeProduct(Long nodeId);
    /**
     * 计算支付价格
     */
    ProductPayPrice calculate(ShopCartEntity shopCartEntity);
}
